argparse
基本用法
import argparse parser = argparse.ArgumentParser() parser.parse_args()
输出:
$ python3 prog.py $ python3 prog.py --help usage: prog.py [-h] optional arguments: -h, --help show this help message and exit $ python3 prog.py --verbose usage: prog.py [-h] prog.py: error: unrecognized arguments: --verbose $ python3 prog.py foo usage: prog.py [-h] prog.py: error: unrecognized arguments: foo
基本用法
必选参数
必选参数的意思就是不用输入类似 "-v xxx" 的语句就可以获取到参数.
import argparse parser = argparse.ArgumentParser() parser.add_argument("echo") args = parser.parse_args() print(args.echo)
输出:
$ python3 prog.py usage: prog.py [-h] echo prog.py: error: the following arguments are required: echo $ python3 prog.py --help usage: prog.py [-h] echo positional arguments: echo optional arguments: -h, --help show this help message and exit $ python3 prog.py foo foo
可选参数
可选参数有两种:
- 短参数, 形如: "-v xxx"
- 长参数, 形如: "--verbosity xxx"
import argparse parser = argparse.ArgumentParser() parser.add_argument("--verbosity", help="increase output verbosity") args = parser.parse_args() if args.verbosity: print("verbosity turned on")
输出:
$ python3 prog.py --verbosity 1 verbosity turned on $ python3 prog.py -v 1 verbosity turned on $ python3 prog.py --verbosity usage: prog.py [-h] [--verbosity VERBOSITY] prog.py: error: argument --verbosity: expected one argument
可选的意思是你可以不填 -v 选项, 但是如果写了 -v, 对应的值一定要给.
禁止指定参数值
通过 action="store_true" 来禁止指定参数值.
import argparse parser = argparse.ArgumentParser() parser.add_argument("--verbose", help="increase output verbosity", action="store_true") args = parser.parse_args() if args.verbose: print("verbosity turned on")
输出:
$ python3 prog.py --verbose verbosity turned on $ python3 prog.py --verbose 1 usage: prog.py [-h] [--verbose] prog.py: error: unrecognized arguments: 1
此时, 有写 --verbose 表示值为 True, 不写 --verbose 表示值为 False.
指定类型
arser = argparse.ArgumentParser() parser.add_argument('x', type=int, help="the base") args = parser.parse_args() answer = args.x ** 2 print(answer)
选择某个值
parser = argparse.ArgumentParser() parser.add_argument("square", type=int, help="display a square of a given number") parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], help="increase output verbosity") args = parser.parse_args() answer = args.square**2 if args.verbosity == 2: print("the square of {} equals {}".format(args.square, answer)) elif args.verbosity == 1: print("{}^2 == {}".format(args.square, answer)) else: print(answer)
使用 choices 表示只能在这里选择值, 输入其他值会出错.
自定义帮助信息
使用 help 参数.
parser.add_argument("square", type=int, help="display a square of a given number")
自定义程序帮助信息
在 ArgumentParser 中使用 description 参数.
argparse.ArgumentParser(description="calculate X to the power of Y")
互斥参数
group = parser.add_mutually_exclusive_group() group.add_argument("-v", "--verbose", action="store_true") group.add_argument("-q", "--quiet", action="store_true")
互斥参数表示: -v -q 不可同时出现.
参数默认值
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], default=1, help="increase output verbosity")
使用 default 来指定默认值.
进阶
子命令
在学习 docker 命令时, 发现 docker 有子命令, 如 docker create, docker run 等. argparse 可以通过 add_subparsers 和 add_parser 来达到这种效果. 具体步骤为:
- 在顶层解析器 parser 下, 定义 subparsers, 用来产生子命令解析器, 每个解析器只能有一个 subparsers;
- 在 subparsers 下, 定义子解析器 parser_a, parser_b, 等等, 这是一对多的关系, 但这些子解析器是互斥关系.
如:
parser = argparse.ArgumentParser() parser.add_argument('-a', metavar='host', default=get_ip(), help='Host address') parser.add_argument('-p', default='9876', help='Port') parser.add_argument('-f', dest="file", help="read method parameters from json file") subparsers = parser.add_subparsers(title='Namespaces', metavar='namespace method [arg=value]') parser_a = subparsers.add_parser('a', help='a help') parser_a.add_argument('bar', type=int, help='bar help') parser.parse_args()
输出:
$ python3 cli.py --help usage: cli.py [-h] [-a host] [-p P] [-f FILE] namespace method [arg=value] ... optional arguments: -h, --help show this help message and exit -a host Host address -p P Port -f FILE read method parameters from json file Namespaces: namespace method [arg=value] a a help
usage: cli.py a [-h] bar positional arguments: bar bar help optional arguments: -h, --help show this help message and exit
Generated by Emacs 25.x(Org mode 8.x)
Copyright © 2014 - pinvon - Powered by EGO